home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / comm / www / htdig3_0_8b2a1.lha / htdig-3.0.8b2 / htfuzzy / Synonym.cc < prev    next >
C/C++ Source or Header  |  1997-08-15  |  3KB  |  140 lines

  1. //
  2. // Synonym.cc
  3. //
  4. // Implementation of Synonym
  5. //
  6. // $Log: Synonym.cc,v $
  7. // Revision 1.1.1.1  1997/02/03 17:11:12  turtle
  8. // Initial CVS
  9. //
  10. //
  11. #if RELEASE
  12. static char RCSid[] = "$Id: Synonym.cc,v 1.1.1.1 1997/02/03 17:11:12 turtle Exp $";
  13. #endif
  14.  
  15. #include "Synonym.h"
  16. #include "htfuzzy.h"
  17. #include <List.h>
  18. #include <StringList.h>
  19. #include <Configuration.h>
  20. #include <stdio.h>
  21. #include <fstream.h>
  22. #include <stdlib.h>
  23.  
  24.  
  25. //*****************************************************************************
  26. Synonym::Synonym()
  27. {
  28.     name = "synonyms";
  29. }
  30.  
  31.  
  32. //*****************************************************************************
  33. Synonym::~Synonym()
  34. {
  35. }
  36.  
  37.  
  38. //*****************************************************************************
  39. int
  40. Synonym::createDB(Configuration &config)
  41. {
  42.     char    *sourceFile;
  43.     char    *dbFile;
  44.     char    input[1000];
  45.     FILE    *fl;
  46.     
  47.     sourceFile = config["synonym_dictionary"];
  48.     dbFile = config["synonym_db"];
  49.  
  50.     fl = fopen(sourceFile, "r");
  51.     if (fl == NULL)
  52.     {
  53.     cout << "htfuzzy/synonyms: unable to open " << sourceFile << endl;
  54.     cout << "htfuzzy/synonyms: Use the 'synonym_dictionary' attribute\n";
  55.     cout << "htfuzzy/synonyms: to specify the file that contains the synonyms\n";
  56.     return NOTOK;
  57.     }
  58.  
  59.     Database    *db = Database::getDatabaseInstance();
  60.  
  61.     if (db->OpenReadWrite(dbFile, 0664) == NOTOK)
  62.     {
  63.     delete db;
  64.     db = 0;
  65.     return NOTOK;
  66.     }
  67.  
  68.     String    data;
  69.     String    word;
  70.     int        count = 0;
  71.     while (fgets(input, sizeof(input), fl))
  72.     {
  73.     StringList    sl(input, " \t\r\n");
  74.     for (int i = 0; i < sl.Count(); i++)
  75.     {
  76.         data = 0;
  77.         for (int j = 0; j < sl.Count(); j++)
  78.         {
  79.         if (i != j)
  80.             data << sl[j] << ' ';
  81.         }
  82.         word = sl[i];
  83.         word.lowercase();
  84.         data.lowercase();
  85.         db->Put(word, data, data.length() - 1);
  86.         if (debug && (count % 10) == 0)
  87.         {
  88.         cout << "htfuzzy/synonyms: " << count << ' ' << word
  89.              << "            \r";
  90.         cout.flush();
  91.         }
  92.         count++;
  93.     }
  94.     }
  95.     fclose(fl);
  96.     db->Close();
  97.     if (debug)
  98.     {
  99.     cout << "htfuzzy/synonyms: " << count << ' ' << word
  100.          << "            \n";
  101.     cout << "htfuzzy/synonyms: Done.\n";
  102.     }
  103.     return OK;
  104. }
  105.  
  106.  
  107. //*****************************************************************************
  108. int
  109. Synonym::openIndex(Configuration &)
  110. {
  111.     char    *dbFile = config["synonym_db"];
  112.     
  113.     db = Database::getDatabaseInstance();
  114.     if (db->OpenRead(dbFile) == NOTOK)
  115.     {
  116.     delete db;
  117.     db = 0;
  118.     return NOTOK;
  119.     }
  120.     return OK;
  121. }
  122.  
  123.  
  124. //*****************************************************************************
  125. void
  126. Synonym::getWords(char *originalWord, List &words)
  127. {
  128.     String    data;
  129.  
  130.     if (db && db->Get(originalWord, data) == OK)
  131.     {
  132.     char    *token = strtok(data.get(), " ");
  133.     while (token)
  134.     {
  135.         words.Add(new String(token));
  136.         token = strtok(0, " ");
  137.     }
  138.     }
  139. }
  140.